package com.lzy.cloud.ticket.train.controller;

import com.lzy.cloud.ticket.train.component.MemberToken;
import com.lzy.cloud.ticket.train.dtos.RoleDto;
import com.lzy.cloud.ticket.train.dtos.SysUserAdminDto;
import com.lzy.cloud.ticket.train.remote.UserApi;
import com.lzy.framework.core.cache.cluster.RedisClusterService;
import com.lzy.framework.core.ensure.Ensure;
import com.lzy.framework.core.output.Result;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 控制器公用处理方法
 * @Author:   gyl
 * @Date:     2018/7/16 15:07
 */
public class BaseController {

    @Autowired
    private UserApi userApi;

    @Autowired
    private RedisClusterService redisClusterService;

    /**
     * 判断是否登录
     * @param token
     * @return
     */
    public MemberToken isLogin(String token) {
        Ensure.that(token).isNotBlank("00001024");
        MemberToken mt = redisClusterService.get("token:"+token,MemberToken.class);
        Ensure.that(mt == null).isFalse("00001033");
        return mt;
    }

    /**
     * 方法说明：根据token获取用户角色列表
     * @date   2018/7/18 14:50
     */
    protected List<RoleDto> selectRoleListByToken(String token) {
        Result userResult = userApi.userRoleList(token);
        List<RoleDto> roleDtoList = new ArrayList<>();
        if (userResult != null) {
            roleDtoList = (List<RoleDto>) userResult.getResult();
        }
        return roleDtoList;
    }

    /**
     * 方法说明：根据token获取用户对象
     * @date   2018/7/18 14:50
     */
    protected SysUserAdminDto selectUserByToken(String token) {
        SysUserAdminDto sysUserAdminDto = new SysUserAdminDto();
        Result userResult = userApi.selectUserByToken(token);
        if (userResult != null) {
            sysUserAdminDto = (SysUserAdminDto) userResult.getResult();
        }
        return sysUserAdminDto;
    }

    /**
     * 方法说明：根据token判断该用户是否拥有总平台角色类型
     * @date   2018/7/18 14:50
     */
    protected Boolean isSystem(String token) {
        Result userResult = userApi.userRoleList(token);
        if (userResult != null) {
            List<RoleDto> roleDtoList = (List<RoleDto>) userResult.getResult();
            Boolean flag = Boolean.FALSE;
            for (RoleDto roleDto : roleDtoList) {
                if (roleDto.getType()!=null && roleDto.getType().toString().equals("1"))
                    flag = Boolean.TRUE;
            }
            return flag;
        }
        return Boolean.FALSE;
    }

    /**
     * 方法说明：根据token判断该用户是否拥有商家平台角色类型的运营角色
     * @date   2018/7/18 14:52
     */
    protected Long isPlatform(String token) {
        Result userResult = userApi.userRoleList(token);
        if (userResult != null) {
            List<RoleDto> roleDtoList = (List<RoleDto>) userResult.getResult();
            Long platformId = 0L;
            for (RoleDto roleDto : roleDtoList) {
                if (roleDto.getType()!=null && roleDto.getType().toString().equals("2")) {
                    if (roleDto.getMode()!=null && roleDto.getMode().toString().equals("1"))
                        platformId = roleDto.getPlatformId();
                }
            }
            return platformId;
        }
        return 0L;
    }

    /**
     * 方法说明：根据token判断该用户是否拥有商家平台角色类型的商家角色
     * @date   2018/7/18 14:53
     */
    protected Long isShop(String token) {
        Result userResult = userApi.userRoleList(token);
        if (userResult != null) {
            List<RoleDto> roleDtoList = (List<RoleDto>) userResult.getResult();
            Long platformId = 0L;
            for (RoleDto roleDto : roleDtoList) {
                if (roleDto.getType()!=null && roleDto.getType().toString().equals("2")) {
                    if (roleDto.getMode()!=null && roleDto.getMode().toString().equals("2"))
                        platformId = roleDto.getPlatformId();
                }
            }
            return platformId;
        }
        return 0L;
    }

}
